package com.xinggq.pay.api.exception;

import com.xinggq.common.exception.AbstractCommonException;
import com.xinggq.common.enums.ResponseEnum;
import java.io.Serial;
import lombok.Getter;
import lombok.Setter;

/**
 * 支付模块业务异常类
 * <p>
 * 继承CommonException，用于支付模块的业务异常处理。
 * 遵循异常处理最佳实践：记录日志、包装异常、避免异常被吞掉。
 * </p>
 *
 * @author zhangyajun
 * @since 2023/9/20 10:09
 */
@Getter
@Setter
public class PayException extends AbstractCommonException {

    /**
     * 序列化版本号
     */
    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 私有构造函数 - 基于ResponseEnum
     *
     * @param responseEnum 响应枚举
     */
    private PayException(ResponseEnum responseEnum) {
        super(responseEnum);
    }

    /**
     * 私有构造函数 - 基于ResponseEnum和自定义消息
     *
     * @param responseEnum 响应枚举
     * @param message      自定义错误信息
     */
    private PayException(ResponseEnum responseEnum, String message) {
        super(responseEnum, message);
    }

    /**
     * 私有构造函数 - 基于ResponseEnum和异常原因
     *
     * @param responseEnum 响应枚举
     * @param cause        原始异常
     */
    private PayException(ResponseEnum responseEnum, Throwable cause) {
        super(responseEnum, cause);
    }

    /**
     * 私有构造函数 - 基于ResponseEnum、自定义消息和异常原因
     *
     * @param responseEnum 响应枚举
     * @param message      自定义错误信息
     * @param cause        原始异常
     */
    private PayException(ResponseEnum responseEnum, String message, Throwable cause) {
        super(responseEnum, message, cause);
    }
}